/**
 * 题目： 爬楼梯
 * n阶台阶，每次爬两阶或一阶，一共有多少种方案；
 * 解题思路：
 * 爬到最后一阶只有两种情况：
 * 1、从倒数第三阶直接到最后一阶（最后跨两个）；
 * 2、从倒数第二阶到最后一阶（最后跨一个）；
 * 所以最后的结果就是把倒数第三阶的方案数+到倒数第二阶的方案数加起来；
 */



/**
 * 方法一：递归获取，退出条件为n<=2,当n小于等于2时返回的就是n;
 */
export function climbStairs(n:number):number {
  if(n <= 2) return n;
  return climbStairs(n-1)+climbStairs(n-2);
}

/**
 * 方法二：遍历n并把每次的结果缓存起来，下次循环的时候直接相加;
 */
export function climbStairs2(n:number): number {
  if(n<=2) return n;
  let res = 1;
  let n1 = 0;
  let n2 = 1;
  for(let i=0; i<n; i++){
    res = n1 + n2;
    n1 = n2;
    n2 = res;
  }
  return res;
}